#include "heap.h"

heap::heap()
{
    cont=0;
    for (int i=0;i<9;i++)
    {
        array[i]=NULL;
    }
}
Persona* heap::operator [](int pos)
{
    return array[pos];
}
bool heap::Vacio()
{
    return cont==0;
}
bool heap::Lleno()
{
    return cont==9;
}
void heap::Agregar(Persona *v)
{
    Agregar(v, cont);
    cont++;
}
void heap::Agregar(Persona *v, int pos)
{
    int i=pos+1;
    int siguiente=i;
    Persona* temp= v;
    int padre = siguiente/2;
    array[siguiente-1]=temp;
    while(siguiente!=1 && array[padre-1]->getCedula()<=array[siguiente-1]->getCedula())
    {
        Persona* temp= array[padre-1];
        array[padre-1]=array[siguiente-1];
        array[siguiente-1]=temp;
        siguiente = padre;
        padre=siguiente/2;
    }
}
void heap::HeapSort()
{
    int padre;
    int hijo;
    //int ultima=8; //max 9 - 1
    Persona* anterior = NULL;

    for(int ultima= 8;ultima>=1;ultima--)
    {
        anterior=array[ultima];
        array[ultima]=array[0];
        padre=0;
        if ((ultima-1)>=1 && array[2]->getCedula()>array[1]->getCedula())
            hijo=2;
        else
            hijo=3;
        while(hijo<ultima-1 && array[hijo]->getCedula()>anterior->getCedula())
        {
            array[padre]=array[hijo];
            padre=hijo;
            hijo=padre*2;
            if(hijo+1<ultima-1 && array[hijo+1]->getCedula()>array[hijo]->getCedula())
                hijo++;
        }
        array[padre]=anterior;
    }
    Persona* temp=array[0];
    array[0]=array[1];
    array[1]=temp;
}
Persona* heap::byID(int id)
{
    for (int i=0; i<cont; i++)
    {
        if(array[i]->getid()==id)
        {
            return array[i];
        }
    }
    return NULL;
}
